From: Florian Müllner Date: Sun, 6 Nov 2022 10:56:41 +0000 (+0100) Subject: dbusService/screencast: Hold during gstreamer checks X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~405^2^2~273 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=a2acecb491e53e889dd995d3db386aaa182e04a0;p=gnome-shell.git dbusService/screencast: Hold during gstreamer checks Some gstreamer plugins require a connection to the display server, so they block until the server is up and running. That's why we moved the check into the D-Bus service, so that the blocking would not lock up the compositor itself. However the block can still delay the service initialization so much that auto-shutdown hits immediately when returning from the constructor. If that happens, the proxy on the shell side is no longer backed by a remote object when the init callback runs, and all properties therefore resolve as `null`. As a result, gnome-shell thinks that screencasts aren't supported and hides the screencast button. Fix this by holding the service during the gstreamer checks, so that the auto-shutdown timeout only starts after the service is ready. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6051 Part-of: --- diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js index f7f36da88..a2bb23cfe 100644 --- a/js/dbusServices/screencast/screencastService.js +++ b/js/dbusServices/screencast/screencastService.js @@ -271,11 +271,14 @@ var ScreencastService = class extends ServiceImplementation { constructor() { super(ScreencastIface, '/org/gnome/Shell/Screencast'); + this.hold(); // gstreamer initializing can take a bit this._canScreencast = ScreencastService.canScreencast(); Gst.init(null); Gtk.init(); + this.release(); + this._recorders = new Map(); this._senders = new Map();